//
//  main.m
//  OC5_数组
//
//  Created by dllo on 15/10/28.
//  Copyright (c) 2015年 dllo. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Book.h"

int main(int argc, const char * argv[]) {

    // 不可变数组
//    // 1, 创建&初始化
//    NSArray *arr1 = [[NSArray alloc] initWithObjects:@"王宁", @"王博男", @"邹雨", @"魏冬冬", nil];
//
    NSArray *arr2 = [NSArray arrayWithObjects:@"王宁", @"王博男", @"邹雨", @"魏冬冬", nil];
    
    // 指向另一个地方
//    arr2 = [NSArray arrayWithObjects:@"耀武扬威", @"王博男", @"邹雨", @"魏冬冬", @"魏王五冬",nil];
//    
////    [arr2 replaceObjectAtIndex:1 withObject:@"张磊磊"];
//    
//    for (NSInteger i = 0; i < arr2.count; i++) {
//        NSLog(@"%@", [arr2 objectAtIndex:i]);
//    }
    
////
    
    
    
    
////    NSArray *arr3 = [NSArray arrayWithArray:arr1];
//    
//    // 2, 数组元素个数
//    NSLog(@"%ld", arr1.count);
//    
//    // 3, 访问
//    // 遍历
//    for (NSInteger i = 0; i < arr1.count; i++) {
//        NSLog(@"%@", arr1[i]);
////
////        // 通过下标访问数组元素
//        NSLog(@"%@", [arr1 objectAtIndex:i]);
//    }
//
//    // 通过对象值获取下标
//    NSLog(@"%ld", [arr1 indexOfObject:@"王宁"]);
    
    
    // 可变数组
    // 1, 创建&初始化
//    NSMutableArray *arrM1 = [NSMutableArray arrayWithObjects:@"王宁", @"王博男", @"邹雨", @"魏冬冬", nil];
//    
//    // 常用便利构造器方法
//    NSMutableArray *arrM2 = [NSMutableArray array];
//    
//    // 2,添加
////    [arrM1 addObject:@"高帅"];
//
//    [arrM2 addObject:arrM1];
//    for (NSInteger i = 0; i < arrM2.count; i++) {
//        
//        NSMutableArray *tempArr = [arrM2 objectAtIndex:i];
//        
//        for (NSInteger j = 0; j < tempArr.count; j++) {
//            NSLog(@"%@", [tempArr objectAtIndex:j]);
//        }
//    }
    
    // 数组中元素可以是不同类型, 但都得是对象类型
//    [arrM1 addObject:arrM2];
    
    // 3,插入
//    [arrM1 insertObject:@"宁宁" atIndex:2];
//    
//    for (NSInteger i = 0; i < arrM1.count; i++) {
//        NSLog(@"%@", [arrM1 objectAtIndex:i]);
//    }

    // 4,删除
//    [arrM1 removeObject:@"王宁"];
//    // 实用 删除最后一个元素
//    [arrM1 removeLastObject];
//    

    
    // 5,替换
    // 将指定下标处的元素值替换为指定值
//    [arrM1 replaceObjectAtIndex:3 withObject:@"王宁宁"];
//    
//    // 6, 交换
//    [arrM1 exchangeObjectAtIndex:1 withObjectAtIndex:3];
    
    
    // 练习1  冒泡排序
//    NSMutableArray *arrM1 = [NSMutableArray arrayWithObjects:@"4", @"5", @"3", @"9", nil];
//    for (NSInteger i = 0; i < arrM1.count - 1; i++) {
//        for (NSInteger j = 0; j < arrM1.count - i - 1; j++) {
////            if([[arrM1 objectAtIndex:j] intValue] > [[arrM1 objectAtIndex:j + 1] intValue]){
////                [arrM1 exchangeObjectAtIndex:j withObjectAtIndex:j + 1];
////            }
//            if ([[arrM1 objectAtIndex:j] compare:[arrM1 objectAtIndex:j + 1]] > 0) {
//                [arrM1 exchangeObjectAtIndex:j withObjectAtIndex:j + 1];
//            }
//            
//            
//        }
//    }
//    for (NSInteger i = 0; i < arrM1.count; i++) {
//        NSLog(@"%@", [arrM1 objectAtIndex:i]);
//    }
    
    
//    图书管理。
//    
//    1、使用可变数组管理所有书籍（定义Book类，包含书名和价格）。
//    2、数组可以添加、删除书籍。
//    3、可以从数组根据书名查找书籍，并修改书籍的价格
//    4、展示所有书籍清单（书名）。
//    
//    Book *c = [Book bookWithName:@"C语言" price:33.3];
//    Book *j = [Book bookWithName:@"java" price:22.2];
//    Book *o = [Book bookWithName:@"oc" price:44.4];
//    NSMutableArray *arrM1 = [NSMutableArray arrayWithObjects:c, j, o, nil];
//    
//    // 2、数组可以添加、删除书籍。
////    [arrM1 addObject:[Book bookWithName:@"wer" price:55.5]];
////    [arrM1 removeObject:j];
////    for (NSInteger i = 0; i < arrM1.count; i++) {
////        NSLog(@"%@", [[arrM1 objectAtIndex:i] name]);
////    }
//    
//    //    3、可以从数组根据书名查找书籍，并修改书籍的价格
//    for (NSInteger i = 0; i < arrM1.count; i++) {
//        if (NSOrderedSame == [[[arrM1 objectAtIndex:i] name] compare:@"C语言"]) {
////            [arrM1 replaceObjectAtIndex:i withObject:[Book bookWithName:@"C语言" price:88.8]];
//            [[arrM1 objectAtIndex:i] setPrice:99.9];
//        }
//    }
//    for (NSInteger i = 0; i < arrM1.count; i++) {
//        NSLog(@"%@%.2f", [[arrM1 objectAtIndex:i] name], [[arrM1 objectAtIndex:i] price]);
//    }
    
    // 值对象
//    int a = 1;
//    // int转对象类型
//    NSNumber *val =[NSNumber numberWithInt:a];
//    NSLog(@"%@", val);
//    // 对象类型转int
//    NSLog(@"%d", [val intValue]);
    
//    int b[3] = {3, 5, 7};
//    NSNumber *abc = [NSNumber num];
//    NSLog(@"%@", abc);
    
    
//    NSRange range = {1, 2};
//    // 结构体/指针 类型转对象类型
//    NSValue *val = [NSValue valueWithRange:range];
//    NSLog(@"%@", val);
//    // 对象类型转结构体/指针 类型
//    NSRange ret = [val rangeValue];
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    return 0;
}
